package ar.uba.fi.taller2.cmmiassistant.frontend.evaluacion.representacion;

import ar.uba.fi.taller2.cmmiassistant.frontend.PanelVista;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Evaluacion;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Representacion;
import ar.uba.fi.taller2.cmmiassistant.vista.Vista;

public abstract class SeleccionandoNivel extends PanelVista {

    private Representacion representacion;

    public SeleccionandoNivel(Vista contexto) {
        super(contexto);
    }

    public void activar() {

        Evaluacion evaluacion = this.getModelo().getEvaluacionSeleccionada()
                .getValor();

        Representacion representacion = null;

        if (!this.correspondeRepresentacion(evaluacion)) {

            representacion = this.crearRepresentacion();

        } else {

            representacion = evaluacion.getRepresentacion();
        }

        this.setRepresentacion(representacion);
        this.activarSeleccion();

        super.activar();
    }

    public boolean correspondeRepresentacion(Evaluacion evaluacion) {

        return (evaluacion != null)
                && (evaluacion.getRepresentacion() != null)
                && (this.getClaseRepresentacion().equals(evaluacion
                        .getRepresentacion().getClass()));
    }

    public Representacion seleccionarRepresentacion() {

        this.aplicarSeleccion();
        return this.getRepresentacion();
    }

    protected void setRepresentacion(Representacion representacion) {

        this.representacion = representacion;
    }

    protected Representacion getRepresentacion() {

        return this.representacion;
    }

    protected abstract Representacion crearRepresentacion();

    protected abstract void activarSeleccion();

    protected abstract void aplicarSeleccion();

    protected abstract Class<? extends Representacion> getClaseRepresentacion();
}
